package com.qm.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import com.qm.model.ImportExcelReprotModel;
import com.qm.model.Users;

public class UserExelImport {
public static ArrayList<ImportExcelReprotModel<Users>> parseUser(MultipartFile excel) throws IOException {
		
		//InputStream file=new FileInputStream("123.xls");
		XSSFWorkbook hssfWorkbook=new XSSFWorkbook(excel.getInputStream());//新建一个excel对象
		XSSFSheet sheet=hssfWorkbook.getSheetAt(0);//去对象的第一页，可以说是第一张表
		XSSFRow headRow=sheet.getRow(0);//取表的第一行，即表头信息
		HashMap<Integer, String> indexMap=new  HashMap<Integer,String>();//创建一个hash表，来存储表头对应的信息
		int colCount=headRow.getPhysicalNumberOfCells();//获取表头的长度
		for(int i=0;i<colCount;i++){//把表头对应的列数和该列对应的字段名存入hash
			XSSFCell cell=headRow.getCell(i);
			String cellValue=cell.getStringCellValue();
			if(!cellValue.isEmpty()&&!indexMap.containsValue(cellValue)){
				indexMap.put(i, cellValue);
			}
		}
		int rowCount=sheet.getPhysicalNumberOfRows();//查询这张表有多少行
		ArrayList<ImportExcelReprotModel<Users>>  users=new ArrayList<>();
		for(int i=1;i<rowCount;i++){//从第二行开始，把数据存入list中
			XSSFRow row=sheet.getRow(i);//读表的第i行数据
		    Users user=new Users();
		    ImportExcelReprotModel<Users> report=new ImportExcelReprotModel<>();
		    report.setData(user);
		    users.add(report);
		    for(int j=0;j<colCount;j++){//表第i行数据的第j列数据
		    	XSSFCell cell=row.getCell(j);
		    	String methodName=indexMap.get(j);
		    	if(methodName==null||methodName.trim().isEmpty()){
					continue;
				}
		    	if(methodName.equals("学号")){
		    		user.setUnumber(getValue(cell));
		    	}
		    	else if(methodName.equals("姓名")){
		    		user.setUname(getValue(cell));
		    	}
		    	else if(methodName.equals("性别")){
		    		user.setUgender(getValue(cell));
		    	}
		    	else if(methodName.equals("年级")&&methodName!=null){
		    		try {
			    		user.setUgrade(Integer.parseInt(getValue(cell)));
					} catch (Exception e) {
						user.setUgrade(null);
					}
		    	}
		    	else if(methodName.equals("密码")&&methodName!=null){
		    		user.setUpassword(getValue(cell));
		    	}
		    }
		    if(user.getUname()==null||user.getUname().trim().isEmpty()){
		    	report.setErrorMsg("姓名不能为空");
		    	report.setErrorLine(i+1);
		    	continue;
		    }
		    if(user.getUnumber()==null||user.getUnumber().trim().isEmpty()){
		    	report.setErrorMsg("学号不能为空");
		    	report.setErrorLine(i+1);
		    	continue;
		    }
		    if(user.getUgrade()==null){
		    	report.setErrorMsg("年级不能为空");
		    	report.setErrorLine(i+1);
		    	continue;
		    }
		}
	
		return users;
	}
	private static String getValue(XSSFCell xssfCell){//判断返回什么类型
		if(xssfCell==null){
			return "";
		}
		if(xssfCell.getCellType()==XSSFCell.CELL_TYPE_BOOLEAN){
			//返回布尔型的值
			return String.valueOf(xssfCell.getBooleanCellValue());
			
		}
		else if(xssfCell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC){
			return String.valueOf((int)xssfCell.getNumericCellValue());
			
		}
		else{
			return String.valueOf(xssfCell.getStringCellValue());
		}
	}


}
